import os
from PIL import Image, ImageDraw, ImageFont
import numpy as np

def debug_font_loading():
    """调试字体加载"""
    print("🔍 调试字体加载...")
    
    # 测试文本
    test_text = "中文测试：你好世界！ABCD123"
    
    # 字体路径列表（按优先级排序）
    font_paths = [
        # 项目本地字体
        "./fonts/simhei.ttf",
        "./fonts/msyh.ttc",
        
        # Windows系统字体
        "C:/Windows/Fonts/simhei.ttf",    # 黑体
        "C:/Windows/Fonts/simsun.ttc",    # 宋体
        "C:/Windows/Fonts/msyh.ttc",      # 微软雅黑
        "C:/Windows/Fonts/msyhbd.ttc",    # 微软雅黑粗体
        "C:/Windows/Fonts/simkai.ttf",    # 楷体
        "C:/Windows/Fonts/simfang.ttf",   # 仿宋
        
        # 备用英文字体
        "arial.ttf",
        "C:/Windows/Fonts/arial.ttf",
    ]
    
    # 创建测试目录
    os.makedirs("font_debug", exist_ok=True)
    
    successful_fonts = []
    
    for font_path in font_paths:
        try:
            # 检查文件是否存在
            if not os.path.exists(font_path):
                print(f"❌ {font_path} - 文件不存在")
                continue
                
            print(f"🔄 尝试加载: {font_path}")
            
            # 尝试加载字体
            font = ImageFont.truetype(font_path, 36)
            
            # 创建测试图像
            img = Image.new('RGB', (800, 200), color=(255, 255, 255))
            draw = ImageDraw.Draw(img)
            
            # 测试绘制文本
            draw.text((20, 80), f"{os.path.basename(font_path)}: {test_text}", font=font, fill=(0, 0, 0))
            
            # 保存测试图像
            filename = f"font_debug/{os.path.basename(font_path)}.png"
            img.save(filename)
            
            successful_fonts.append(font_path)
            print(f"✅ {font_path} - 加载成功")
            
        except Exception as e:
            print(f"❌ {font_path} - 加载失败: {e}")
    
    # 总结
    print(f"\n📊 字体调试完成:")
    print(f"   成功加载: {len(successful_fonts)} 个字体")
    
    if successful_fonts:
        print("✅ 可用的字体:")
        for font in successful_fonts:
            print(f"   - {font}")
            
        # 测试在numpy数组中的表现
        test_numpy_rendering(successful_fonts[0])
    else:
        print("❌ 没有可用的字体")
        
    return successful_fonts

def test_numpy_rendering(font_path):
    """测试字体在numpy数组中的渲染（模拟视频生成环境）"""
    print(f"\n🎨 测试numpy渲染: {font_path}")
    
    try:
        font = ImageFont.truetype(font_path, 36)
        
        # 创建图像并转换为numpy数组（模拟视频生成流程）
        img = Image.new('RGB', (800, 200), color=(100, 100, 200))
        draw = ImageDraw.Draw(img)
        
        test_text = "numpy渲染测试：中文ABCD"
        draw.text((50, 80), test_text, font=font, fill=(255, 255, 255))
        
        # 转换为numpy数组
        img_array = np.array(img)
        print(f"✅ numpy数组形状: {img_array.shape}")
        print(f"✅ 数据类型: {img_array.dtype}")
        
        # 保存测试结果
        Image.fromarray(img_array).save("font_debug/numpy_test.png")
        print("✅ numpy渲染测试成功")
        
    except Exception as e:
        print(f"❌ numpy渲染测试失败: {e}")

def create_fonts_directory():
    """创建字体目录并提示用户添加字体"""
    fonts_dir = "./fonts"
    if not os.path.exists(fonts_dir):
        os.makedirs(fonts_dir)
        print(f"\n📁 已创建字体目录: {fonts_dir}")
        print("💡 请将中文字体文件（如simhei.ttf、msyh.ttc等）复制到此目录")
        
        # 创建说明文件
        with open(f"{fonts_dir}/README.txt", "w", encoding="utf-8") as f:
            f.write("字体文件说明\n")
            f.write("============\n\n")
            f.write("请将中文字体文件放在此目录下，例如：\n")
            f.write("- simhei.ttf (黑体)\n")
            f.write("- msyh.ttc (微软雅黑)\n")
            f.write("- simsun.ttc (宋体)\n\n")
            f.write("可以从Windows系统的 C:/Windows/Fonts/ 目录复制字体文件\n")

if __name__ == "__main__":
    print("🚀 开始字体调试...")
    
    # 创建字体目录
    create_fonts_directory()
    
    # 调试字体加载
    available_fonts = debug_font_loading()
    
    if available_fonts:
        print("\n🎉 字体调试完成！")
    else:
        print("\n❌ 没有找到可用的中文字体")
        print("💡 解决方案:")
        print("   1. 从 C:/Windows/Fonts/ 复制字体到 ./fonts/ 目录")
        print("   2. 下载中文字体并放在 ./fonts/ 目录")
        print("   3. 修改代码使用系统字体路径")